Converting two dimension array to one dimension array.
· 5 min read
2차원 배열을 1차원 배열로 변환하는게 어렵지 않을 것 같은데, 또 막상 생각하면 이런 저런 삑싸리가 많이 나는 코드를 작성하게 되는 것 같아서, 이번에 작성을 해놓고 나중에 이 코드를 참조를 해야겠다.
Grid
Grid는 n * n Grid를 기본으로 사용하였다. m * n도 그렇게 크게 다르진 않을 것이라고 생각되기때문에.
m * n이라고 해도, 실제로 중요한간 가로의 사이즈 즉, m이 중요하다고 생각된다.
일단 두개의 메서드가 필요하다.
- getIndexFrom(int x, int y): x, y값으로부터 일차원 배열의 index를 반환해주는 메서드
- getPointFrom(int index): 1차원 배열의 index로부터 x, y값을 반환해주는 메서드
1차원 배열의 index 구하기
x, y값으로부터 1차원 배열의 index를 구하는 공식은 아래와 같다.
N은 grid의 사이즈
N * (x -1) + (y -1)
x, y에서 각각 -1을 해준 것은 1차원 배열의 index는 0부터 시작하기 때문이다. 따라서 getIndexFrom(int x, int y)의 전체 코드 내용은 아래와 같다.
public int getIndexFrom(int x, int y){
return this.size * (x -1) + (y -1);
}
index로부터 x, y 구하기
1차원 배열의 index를 구할때의 공식의 x를 가지고 계산하는 부분은 아래와 같고
N * (x -1)
이를 역으로 치환하면
(index / N) + 1
그리고 y는 아래와 같이 구할 수 있다.
(index % N) + 1
따라서 getPointFrom(int index)의 전체 코드는 아래와 같다.
public Point getPointFrom(int index){
int x = (int) (index / this.size) + 1;
int y = (index % this.size) + 1;
return new Point(x, y);
}